home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / More Source / C⁄C++ / Arashi 1.1 / Game Source / jaf src / RectZoom.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-03-23  |  2.8 KB  |  154 lines  |  [TEXT/KAHL]

  1. /*/
  2.      Project Arashi: RectZoom.c
  3.      Major release: Version 1.1, 7/22/92
  4.  
  5.      Last modification: Tuesday, March 23, 1993, 20:43
  6.      Created: Sunday, March 14, 1993, 22:01
  7.  
  8.      Copyright © 1993, Juri Munkki
  9. /*/
  10.  
  11. /*
  12. ** //Jaf © copyright 1991
  13. */
  14.  
  15. #include "VA.h"
  16. #include "STORM.h"
  17.  
  18. #define    ZOOMSTEPS    20
  19. #define    MAPPINGS    5
  20.  
  21. int        RectMappings[][4]={ 
  22.                     {    1,2,3,0    },
  23.                     {    3,0,1,2    },
  24.                     {    2,3,0,1    },
  25.                     {    2,1,0,3    },
  26.                     {    0,3,2,1    }};
  27.  
  28. Point    FromPoints[4];
  29. Point    MidPoints[4];
  30. Point    ToPoints[4];
  31. int        *CurrentMapping;
  32. extern  long    Phaze;
  33. extern  int        SpecialEvent;
  34.  
  35. void    DrawZoom()
  36. {
  37.     int        i,sizfactor;
  38.     Point    *Mid,*To;
  39.     
  40.     VA.color = 2;
  41.     if(Phaze>0)
  42.     {    Phaze--;
  43.         Mid=MidPoints;
  44.         To=ToPoints;
  45.         for(i=0;i<4;i++)
  46.         {    Mid->h = To->h + (Phaze * (FromPoints[CurrentMapping[i]].h - To->h)) / ZOOMSTEPS;
  47.             Mid->v = To->v + (Phaze * (FromPoints[CurrentMapping[i]].v - To->v)) / ZOOMSTEPS;
  48.             Mid++;
  49.             To++;
  50.         }
  51.         
  52.     }
  53.  
  54. #define    JITTERTIME    6
  55.     if(Phaze>JITTERTIME && Phaze<ZOOMSTEPS-JITTERTIME)
  56.     {    VAMoveTo(MidPoints[3].h,MidPoints[3].v);
  57.         Mid=MidPoints;
  58.         for(i=0;i<4;i++)
  59.         {    VASafeLineTo(Mid->h,Mid->v);
  60.             Mid++;
  61.         }
  62.     }
  63.     else
  64.     {    if(Phaze>=ZOOMSTEPS-JITTERTIME)
  65.             sizfactor=ZOOMSTEPS-Phaze;
  66.         else
  67.             sizfactor=Phaze;
  68.         sizfactor+=7;
  69.         Mid=MidPoints;
  70.         for(i=0;i<4;i++)
  71.         {    VAFractalLine(Mid->h,Mid->v,MidPoints[(i+1)&3].h,MidPoints[(i+1)&3].v,1<<sizfactor,5);
  72.             Mid++;
  73.         }
  74.     }
  75. }
  76. void    NewZoomRect(r)
  77. Rect    *r;
  78. {
  79.     Point    swapper,*dest;
  80.     int        i;
  81.     
  82.     for(i=0;i<4;i++)
  83.     {    FromPoints[i]=ToPoints[i];
  84.     }
  85.  
  86.     ToPoints[0].h=r->left;
  87.     ToPoints[1].h=r->left;
  88.     ToPoints[2].h=r->right;
  89.     ToPoints[3].h=r->right;
  90.  
  91.     ToPoints[0].v=r->top;
  92.     ToPoints[1].v=r->bottom;
  93.     ToPoints[2].v=r->bottom;
  94.     ToPoints[3].v=r->top;
  95.     
  96.     CurrentMapping=RectMappings[FastPosRandom() % MAPPINGS];
  97.     Phaze=ZOOMSTEPS+1;
  98. }
  99.  
  100. void    InitZoomRect(r)
  101. Rect    *r;
  102. {
  103.     int        i;
  104.  
  105.     FromPoints[0].h=r->left;
  106.     FromPoints[1].h=r->left;
  107.     FromPoints[2].h=r->right;
  108.     FromPoints[3].h=r->right;
  109.  
  110.     FromPoints[0].v=r->top;
  111.     FromPoints[1].v=r->bottom;
  112.     FromPoints[2].v=r->bottom;
  113.     FromPoints[3].v=r->top;
  114.     
  115.     for(i=0;i<4;i++)
  116.     {    ToPoints[i]=FromPoints[i];
  117.         MidPoints[i]=FromPoints[i];
  118.     }
  119.     
  120.     Phaze=0;
  121. }
  122.  
  123. /* Jaf */
  124. void    DrawZoomer()
  125. {
  126.     extern Rect    Zoom;    
  127.     int MaxScale;
  128.     extern int MainStage;
  129.     
  130.     MaxScale=Getfontscale();
  131.     
  132.     if(!Phaze) {
  133.         InitZoomRect(&Zoom);
  134.         if(MainStage >= 13){    
  135.              Zoom.right=(VA.frame.right-VA.frame.right/12);
  136.             Zoom.bottom=(VA.frame.bottom-VA.frame.bottom/4);
  137.             Zoom.left=(VA.frame.left+VA.frame.right/12);
  138.             Zoom.top=(VA.frame.top+VA.frame.bottom/12);
  139.         }
  140.         else {
  141.             Zoom.left=((unsigned int)Random())%(VA.frame.right-22*(MaxScale*3+3));
  142.             Zoom.right=Zoom.left+22*(MaxScale*3+3);
  143.             Zoom.top=((unsigned int)Random())%(VA.frame.bottom-90*MaxScale);
  144.             Zoom.bottom=Zoom.top+80*MaxScale;
  145.         }
  146.         NewZoomRect(&Zoom);
  147.     }
  148.     DrawZoom();
  149.     if(!Phaze) {
  150.         PlayB(PhazerOut,0);        
  151.         SpecialEvent = 0;
  152.     }
  153. }
  154.